home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / Mesa-2.2 / demos / gamma.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-29  |  4.6 KB  |  166 lines

  1. /* gamma.c */
  2.  
  3.  
  4. /*
  5.  * Draw test patterns to help determine correct gamma value for a display.
  6.  * When the intensities in the top row nearly match the intensities in
  7.  * the bottom row you've found the right gamma value.
  8.  *
  9.  * For more info about gamma correction see:
  10.  *  http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html
  11.  *
  12.  * This program is in the public domain
  13.  *
  14.  * Brian Paul  19 Oct 1995
  15.  */
  16.  
  17.  
  18.  
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <stdlib.h>
  22. #include "glaux.h"
  23.  
  24.  
  25.  
  26. static void Reshape( int width, int height )
  27. {
  28.    glViewport(0, 0, (GLint)width, (GLint)height);
  29.  
  30.    glMatrixMode(GL_PROJECTION);
  31.    glLoadIdentity();
  32.    glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 );
  33.    glMatrixMode(GL_MODELVIEW);
  34. }
  35.  
  36.  
  37. static GLubyte p25[] = {
  38.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  39.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  40.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  41.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  42.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  43.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  44.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  45.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  46.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  47.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  48.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  49.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  50.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  51.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  52.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  53.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  54. };
  55.  
  56. static GLubyte p50[] = {
  57.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  58.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  59.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  60.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  61.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  62.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  63.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  64.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  65.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  66.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  67.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  68.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  69.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  70.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  71.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  72.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  73. };
  74.  
  75. static GLubyte p75[] = {
  76.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  77.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  78.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  79.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  80.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  81.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  82.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  83.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  84.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  85.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  86.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  87.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  88.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  89.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  90.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  91.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  92. };
  93.    
  94.  
  95.  
  96. static void display( void )
  97. {
  98.  
  99.    glClear( GL_COLOR_BUFFER_BIT );
  100.  
  101.    /** DITHERED ROW **/
  102.  
  103.    /* solid black */
  104.  
  105.    /* 25% white */
  106.    glEnable( GL_POLYGON_STIPPLE );
  107.    glColor3f( 1.0, 1.0, 1.0 );
  108.    glPolygonStipple( p25 );
  109.    glRectf( -0.6, 1.0, -0.2, 0.01 );
  110.  
  111.    /* 50% white */
  112.    glPolygonStipple( p50 );
  113.    glRectf( -0.2, 1.0, 0.2, 0.01 );
  114.    
  115.    /* 75% white */
  116.    glPolygonStipple( p75 );
  117.    glRectf( 0.2, 1.0, 0.6, 0.01 );
  118.  
  119.    /* 100% white */
  120.    glDisable( GL_POLYGON_STIPPLE );
  121.    glRectf( 0.6, 1.0, 1.0, 0.01 );
  122.  
  123.  
  124.    /*** GRAY ROW ***/
  125.  
  126.    /* solid black */
  127.  
  128.    /* 25% white */
  129.    glColor3f( 0.25, 0.25, 0.25 );
  130.    glRectf( -0.6, -0.01, -0.2, -1.0 );
  131.  
  132.    /* 50% white */
  133.    glColor3f( 0.5, 0.5, 0.5 );
  134.    glRectf( -0.2, -0.01, 0.2, -1.0 );
  135.  
  136.    /* 75% white */
  137.    glColor3f( 0.75, 0.75, 0.75 );
  138.    glRectf( 0.2, -0.01, 0.6, -1.0 );
  139.  
  140.    /* 100% white */
  141.    glColor3f( 1.0, 1.0, 1.0 );
  142.    glRectf( 0.6, -0.01, 1.0, -1.0 );
  143.  
  144.    glFlush();
  145. }
  146.  
  147.  
  148.  
  149. int main( int argc, char **argv )
  150. {
  151.    auxInitDisplayMode( AUX_RGB );
  152.  
  153.    auxInitPosition( 50, 50, 400, 200 );
  154.  
  155.    if (auxInitWindow("gamma test patterns") == GL_FALSE) {
  156.       auxQuit();
  157.    }
  158.  
  159.    auxExposeFunc(Reshape);
  160.    auxReshapeFunc(Reshape);
  161.  
  162.    auxMainLoop( display );
  163.  
  164.    return 0;
  165. }
  166.